隨著云繼續成為現代企業的主要特征,人們重新開始關注確定您的工作負載以及整個組織是否已準備好在云原生環境中運行。由于其中涉及各種考慮因素,組織需要仔細分析從供應商到編排工具的所有內容。在這里,我們將深入研究其中一個考慮因素的細節:云原生 API 網關。由于我們已經在“DevOps 云原生工具格局的完整概述”中介紹了 API 網關,本文將更深入地研究它們的工作原理。
什么是 API 網關?
API 網關的確切定義很難確定;人們使用各種術語來定義其影響,例如單點入口、接口和反向代理。盡管如此,這個想法仍然是一樣的——API 網關作為一個層將您的客戶端和服務分開。雖然傳統方法意味著客戶端將他們的請求直接定向到微服務,但現在請求由網關處理,然后網關將請求傳遞到適當的服務。API網關作為事實上的客戶端請求協調器和編排器,簡化了分布式系統的實現。它對于試圖從單片系統架構轉向微服務的組織特別有用。
API網關有什么用?
API 網關越來越受歡迎的主要原因之一是微服務軟件的使用同時增加。與獨立的整體設計相反,微服務將整個應用程序劃分為各種松散連接的服務。這些微服務中的每一個都是自給自足的,并且具有獨特的功能。然而,正是這一重要特性激發了對 API 網關的需求。
不要誤會我們的意思——微服務提供了大量的好處,因為它們使開發、部署和維護變得異常容易。但是當涉及到請求處理時,擁有多個微服務會使客戶端很難快速訪問特定服務。
這就是 API 網關的用武之地;通過充當反向代理,它解決了客戶端問題并允許輕松訪問各種微服務。使用 API 服務器,客戶端只需發送一個單獨的請求。
它還包含一個 HTTP 服務器,該服務器具有與每個微服務關聯的路由。收到請求后,網關立即映射整個請求并識別傳遞請求所需的相關服務。
事實上,它甚至可以將請求參數映射到特定微服務所需的輸入參數。其中一些要求輸入參數驗證作為處理請求的必要先決條件,API 網關可以確保此步驟不需要人工干預。
路由到此結束——API 網關的主要功能。
API 網關還可以執行哪些其他功能?
盡管 API 對現代組織應用程序的重要性怎么強調都不為過,但太多會證明是管理上的一個難題。API 網關為用戶提供了大量管理功能,有助于完成安全等核心任務。這是一個廣泛的功能列表:
驗證
API 身份驗證是一項重要的安全檢查,通常在訪問每個單獨的微服務時都需要進行。有了 API 網關,就可以在網關本身對調用進行身份驗證。
這樣,即使客戶端請求多個微服務訪問,網關也會保證 API 調用只認證一次。這大大減少了延遲問題,并在整個應用程序中提供了一致的身份驗證檢查。
指標收集
開發人員長期以來一直希望在請求匯集的地方收集分析,因為這提供了處理所有請求的完美位置。有了 API 網關,您將獲得一個全面的“網關”,所有流程都將不可避免地通過該網關。
利用這種分析能力可以為用戶提供更深入的洞察力,并最終實現更多的控制。例如,您可以分析特定用戶轉發的請求數或通過網關中繼到各個微服務的請求數。作為回報,您可以使用此信息來實施速率限制。這使您可以拒絕發出過多請求的用戶,以免使微服務負擔過重。
響應轉換
訪問現代應用程序的設備多種多樣,從功能強大的計算機到智能手機和平板電腦——因此,每個用戶都需要訪問不同的信息并滿足不同的要求。例如,移動用戶需要的數據少于來自桌面系統的客戶端請求。由于 API 網關是唯一的入口來源,它知道哪個客戶端需要什么。此信息隨后可用于進行內部調用,并根據不同客戶的要求將數據提供給他們。
輸入驗證
API 網關還具備處理簡單邏輯的能力。以輸入驗證為例,網關在將請求發送到微服務之前驗證請求是否包含所有必要的數據。此外,它還會檢查請求的格式和代碼是否正確,以便它以準備執行狀態到達服務。
負載均衡
您需要確保沒有節點因請求而負擔過重,以便您的應用程序繼續平穩運行。API 網關可以被編程為足夠智能,以平衡特定微服務中存在的不同節點之間的負載。通過監控整個負載,它可以作為一個高效的負載平衡器。
服務發現和請求調度
這是另一個特性,源于 API 網關充當客戶端訪問微服務的反向代理。在一個典型的過程中,它會收到一個請求并將其傳遞給所有需要的微服務。一旦他們用答案做出回應,網關就會在結果到達客戶端之前組合這些結果。
在此過程中,網關會記錄特定微服務的每個節點所用的基本響應時間——這在根據優先級對 API 調用進行分段時會派上用場。對于高優先級調用,請求可以路由到響應最快的節點。
斷路器
就像傳統的斷路器一樣,這個隱喻斷路器也會關閉受影響的電路,直到問題得到解決。這是您需要知道的;在應用程序中,數據加載或由于任何其他問題導致的組件故障并不罕見。為了處理這種情況,API 網關使用“斷路器”方法。
一旦達到特定的請求閾值,發生故障的組件將停止從網關接收更多數據。這不僅為分析日志和通過更新推送修復贏得了時間,還有效地關閉了整個電路,直到核心問題得到解決。
API 網關有什么好處?
如果 API 網關提供的附加功能不足以讓您信服,那么讓我們告訴您它們還具有其他各種好處。從長遠來看,這些功能允許您將松散耦合的微服務打包到一個簡潔的應用程序中。以下是 API 網關提供的好處:
更簡潔的客戶端代碼
隨著客戶端和后端服務的分離,客戶端不需要知道每個微服務是如何組成的。通過 API 網關處理所有請求,代碼維護變得更加簡單。這也不需要單獨的微服務來跟蹤端點或處理請求失敗。這節省了時間,因為開發人員不需要在他們的應用程序中編寫“邏輯”代碼,從而增強消費者體驗。
減少延遲
即使來自客戶端應用程序的單個請求也可能需要同時調用多個微服務的 API。以亞馬遜為例;一個簡單的搜索可能會返回各種產品的列表、它們的庫存情況和評論。如果不是 API 網關,客戶端請求將多次訪問每個微服務。結果是延遲顯著增加,從而導致用戶體驗不佳。
增強的應用程序安全性
如果開發人員選擇不包含 API 網關,那么他們必須讓每個微服務能夠對他們遇到的客戶端請求進行自己的安全相關分析。對于開發人員而言,這意味著需要花費數小時的額外編碼時間才能將這種復雜的決策制定技能添加到代碼中。這是必要的,因為在沒有單一入口點的情況下,每個微服務都必須回答以下問題:
- 請求是否被授權?
- 溝通渠道安全嗎?
- 請求是否包含所有必需的參數?
- 客戶端是否發出了太多請求?
回答所有這些問題不可避免地會使代碼更加復雜。因此,它越復雜,出現“錯誤”的可能性就越大。從操作員的角度來看,復雜的代碼需要增加維護和停機時間。這不僅會嚴重影響用戶體驗,還會增加不良行為者可用的總體攻擊面。所有這些問題都可以通過集中的入口點來避免。API 網關確保所有身份驗證和安全檢查都在一個地方處理,使后端微服務不受影響,從而提供流暢的用戶體驗并提高安全性。
流行的 API 網關
市場上有各種開源 API 網關。以下是全球數以千計的開發人員正在使用的最受歡迎的列表:
Kong
作為最早的云原生 API 網關之一,Kong是該領域的熱門平臺。網關主要用 Lua 編寫,由開源和專有插件增強。與列表中的其他工具類似,Kong 帶有一個集成的、同一供應商的 API 管理服務——Kong 服務控制平臺。
Tyk
Tyk是一個開源 API 網關,它是用 Go 開發的,允許它與用不同編碼語言編寫的插件兼容。Tyk 的不同之處在于他們的管理服務;該公司以兩種不同的方式提供其專有的 API 管理平臺——本地安裝或收費的托管服務。
Ambassador
又一個 API 網關,Ambassador是 Kubernetes 原生的。它建立在充當入口控制器的 Envoy 服務器之上。如果您的微服務結構是基于 Kubernetes 集群的,那么使用 Ambassador 是一個明智的選擇,因為它具有固有的集成性和高效運行 YAML 配置文件的能力。
快速網關
Express Gateway基于 Node.js,完全構建在 Express 和 Express 中間件平臺上。其簡單的配置過程和支持 JavaScript 插件的能力是它區別于其他網關的獨特之處之一。它還可以重用現有的 Express 中間件功能以獲得更大的效果。
結論
總而言之,API 網關是一個反向代理,允許將微服務作為 API 提供。這樣做的最大優勢在于,它通過將后端微服務暴露給客戶的請求,有助于消除安全漏洞的可能性。
作為中央接口,它不僅可以讓開發人員保持代碼相對簡單,還可以減少延遲問題。借助更具凝聚力和安全性的微服務結構,您能夠為客戶端提供增強的用戶體驗。有了廣泛的可用選項,最好的 API 網關平臺最終取決于您的系統架構和工作負載的性質。